mblen関数は、マルチバイト文字のバイト数を取得します。
#include <stdlib.h>
int mblen(const char *s, size_t n);
sは、バイト数を取得する対象となるマルチバイト文字を指定します。
マルチバイト文字とは、半角の「abc」「123」などの1バイト文字と、全角の「あいうえお」という2バイト文字が混在した文字セットの文字です。
Shift_JISやEUC-JPなどの文字セットがこれにあたります。
nは、マルチバイト文字1文字に必要な、最大バイト数を指定します。
この値は文字セットに依存し、以下が定義されています。
MB_CUR_MAX | 現在のロケールのLC_CTYPE設定で、 マルチバイト文字1文字に必要な最大バイト数 |
---|---|
MB_LEN_MAX | 全てのロケールで、 マルチバイト文字1文字に必要な最大バイト数 |
※LC_CTYPE設定というのは、ロケール(地域情報)設定のことで、設定と参照はsetlocale関数で行うことができます。
戻り値として、
成功時は、sで指定したマルチバイト文字のバイト数を返し、
失敗時は、-1を返します。
プログラム 例
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main(void) { const char multi[] = 'あ123いう'; int i, len; int bytelen, charlen; /* ロケールをjpn(日本)にする */ setlocale( LC_CTYPE, 'jpn' ); bytelen = (int)strlen(multi); charlen = 0; i = 0; while (multi[i] != '�') { /* 各文字ごとのバイト数を取得する */ len = mblen(&multi[i], MB_CUR_MAX); if (len != -1) { i += len; charlen++; } else { break; } } printf('%sn', multi); printf('バイト数:%dn', bytelen); printf('文字数:%dn', charlen); return 0; }
例の実行結果
> mblen.exe あ123いう バイト数:9 文字数:6
※Windows環境でのみ動作確認しております。LINUX環境などでは動作が異なる場合がありますので、その場合は環境に合わせてカスタマイズしてください。
Copyright © 2011 katsumi Handa All Rights Reserved.